<template>
  <div>
    <h3 class="title">App组件</h3>
    <hr />
    <child />
  </div>
</template>

<script>
// 同步导入
// import child from './components/child.vue'
import loading from './components/loading/loading.vue'

const cmp = new Promise(resolve => {
  setTimeout(() => {
    resolve(import('./components/child.vue'))
  }, 3000)
})

const AsyncComponent = () => ({
  // 需要加载的组件 (应该是一个 `Promise` 对象)
  // component: import('./components/child.vue'),
  component: cmp,
  // 异步组件加载时使用的组件
  loading,
  // 加载失败时使用的组件
  // error: ErrorComponent,
  // 展示加载时组件的延时时间。默认值是 200 (毫秒)
  delay: 200,
  // 如果提供了超时时间且组件加载也超时了，
  // 则使用加载失败时使用的组件。默认值是：`Infinity`
  timeout: 3000
})

export default {
  components: {
    // 异步组件
    // key标签名:函数，此函数必须要返回一个promise
    // 使用此方式最多的
    // child: () => import('./components/child.vue')
    // 异步组件工厂
    child: AsyncComponent
    // 自定义分包的文件名称
    // child: () => import(/*webpackChunkName:'child'*/ './components/child.vue')
  },
  data() {
    return {}
  },
  methods: {}
}
</script>

<style lang="scss" scoped></style>
